#ifndef XGP_STUDY_DEMO46_CIRCLELINKLIST_H
#define XGP_STUDY_DEMO46_CIRCLELINKLIST_H

#include <iostream>
using namespace std;

class CircleLinkNode {
public:
    CircleLinkNode* next;
};

//比较回调
typedef bool(*COMPARENODE)(CircleLinkNode*,CircleLinkNode*);
//打印回调
typedef void(*PRINTNODE)(CircleLinkNode*);

class CircleLinkList {
    public:
        CircleLinkNode head;
        int size;

    //初始化函数
    CircleLinkList* Init_CircleLinkList();
    //插入函数
    void Insert_CircleLinkList(int pos,CircleLinkNode* data);
    //获得第一个元素
    CircleLinkNode* Front_CircleLinkList();
    //根据位置删除
    void RemoveByPos_CircleLinkList(int pos);
    //根据值删除
    void RemoveByValue_CircleLinkList(CircleLinkNode* data,COMPARENODE compare);
    //获得链表的长度
    int Size_CircleLinkList();
    //判断是否为空
    int IsEmpty_CircleLinkList();
    //查找
    int Find_CircleLinkList(CircleLinkNode* data,COMPARENODE compare);
    //打印
    void Print_CircleLinkList(PRINTNODE print);
    //释放内存
    void FreeSpace_CircleLinkList();
};

#endif //XGP_STUDY_DEMO46_CIRCLELINKLIST_H
